Use GtkTrashMonitor instead of an API to set the trash state
authorFederico Mena Quintero <federico@gnome.org>
Thu, 10 Jan 2013 21:06:01 +0000 (15:06 -0600)
committerFederico Mena Quintero <federico@gnome.org>
Thu, 10 Jan 2013 21:06:01 +0000 (15:06 -0600)
This lets us remove two entry points, gtk_places_sidebar_set_show_trash(),
and gtk_places_sidebar_set_trash_is_full().

Signed-off-by: Federico Mena Quintero <federico@gnome.org>
gtk/gtkplacessidebar.c
gtk/gtkplacessidebar.h

index 26f44a54269693b00caa2381e94cae1b4c2c084b..aa17bf9b8bde6a3bbfadc112d1d6c63f7f0e168b 100644 (file)
@@ -81,6 +81,7 @@
 #include "gtkseparatormenuitem.h"
 #include "gtksettings.h"
 #include "gtkstock.h"
+#include "gtktrashmonitor.h"
 #include "gtktreeselection.h"
 #include "gtktreednd.h"
 #include "gtktypebuiltins.h"
 #define DO_NOT_COMPILE 0
 
 struct _GtkPlacesSidebar {
-       GtkScrolledWindow  parent;
-       GtkTreeView        *tree_view;
-       GtkCellRenderer    *eject_icon_cell_renderer;
-       char               *uri;
-       GtkListStore       *store;
-       GtkBookmarksManager *bookmarks_manager;
-       GVolumeMonitor *volume_monitor;
+       GtkScrolledWindow parent;
+
+       GtkTreeView             *tree_view;
+       GtkCellRenderer         *eject_icon_cell_renderer;
+       char                    *uri;
+       GtkListStore            *store;
+       GtkBookmarksManager     *bookmarks_manager;
+       GVolumeMonitor          *volume_monitor;
+       GtkTrashMonitor         *trash_monitor;
+
+       gulong trash_monitor_changed_id;
 
        gboolean devices_header_added;
        gboolean bookmarks_header_added;
@@ -121,8 +126,6 @@ struct _GtkPlacesSidebar {
        char *hostname;
 
        guint show_desktop : 1;
-       guint show_trash : 1;
-       guint trash_is_full : 1;
        guint accept_uri_drops : 1;
 };
 
@@ -201,8 +204,6 @@ enum {
 #define ICON_NAME_FILESYSTEM   "drive-harddisk-symbolic"
 #define ICON_NAME_EJECT                "media-eject-symbolic"
 #define ICON_NAME_NETWORK      "network-workgroup-symbolic"
-#define ICON_NAME_TRASH                "user-trash-symbolic"
-#define ICON_NAME_TRASH_FULL   "user-trash-full-symbolic"
 
 #define ICON_NAME_FOLDER_DESKTOP       "user-desktop"
 #define ICON_NAME_FOLDER_DOCUMENTS     "folder-documents-symbolic"
@@ -796,16 +797,15 @@ update_places (GtkPlacesSidebar *sidebar)
        /* XDG directories */
        add_special_dirs (sidebar);
 
-       if (sidebar->show_trash) {
-               mount_uri = "trash:///"; /* No need to strdup */
-               icon = g_themed_icon_new (sidebar->trash_is_full ? ICON_NAME_TRASH_FULL : ICON_NAME_TRASH);
-               add_place (sidebar, PLACES_BUILT_IN,
-                          SECTION_COMPUTER,
-                          _("Trash"), icon, mount_uri,
-                          NULL, NULL, NULL, 0,
-                          _("Open the trash"));
-               g_object_unref (icon);
-       }
+       /* Trash */
+       mount_uri = "trash:///"; /* No need to strdup */
+       icon = _gtk_trash_monitor_get_icon (sidebar->trash_monitor);
+       add_place (sidebar, PLACES_BUILT_IN,
+                  SECTION_COMPUTER,
+                  _("Trash"), icon, mount_uri,
+                  NULL, NULL, NULL, 0,
+                  _("Open the trash"));
+       g_object_unref (icon);
 
        /* Application-side shortcuts */
        add_application_shortcuts (sidebar);
@@ -3302,6 +3302,13 @@ tree_view_set_activate_on_single_click (GtkTreeView *tree_view)
                          NULL);
 }
 
+static void
+trash_monitor_trash_state_changed_cb (GtkTrashMonitor *monitor,
+                                     GtkPlacesSidebar *sidebar)
+{
+       update_places (sidebar);
+}
+
 
 static void
 gtk_places_sidebar_init (GtkPlacesSidebar *sidebar)
@@ -3318,6 +3325,10 @@ gtk_places_sidebar_init (GtkPlacesSidebar *sidebar)
 
        sidebar->bookmarks_manager = _gtk_bookmarks_manager_new (bookmarks_changed_cb, sidebar);
 
+       sidebar->trash_monitor = _gtk_trash_monitor_get ();
+       sidebar->trash_monitor_changed_id = g_signal_connect (sidebar->trash_monitor, "trash-state-changed",
+                                                             G_CALLBACK (trash_monitor_trash_state_changed_cb), sidebar);
+
        sidebar->shortcuts = NULL;
 
        gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sidebar),
@@ -3524,6 +3535,12 @@ gtk_places_sidebar_dispose (GObject *object)
                sidebar->popup_menu = NULL;
        }
 
+       if (sidebar->trash_monitor) {
+               g_signal_handler_disconnect (sidebar->trash_monitor, sidebar->trash_monitor_changed_id);
+               sidebar->trash_monitor_changed_id = 0;
+               g_clear_object (&sidebar->trash_monitor);
+       }
+
        g_clear_object (&sidebar->store);
 
        g_slist_free_full (sidebar->shortcuts, g_object_unref);
@@ -3856,24 +3873,6 @@ gtk_places_sidebar_set_show_desktop (GtkPlacesSidebar *sidebar, gboolean show_de
        update_places (sidebar);
 }
 
-void
-gtk_places_sidebar_set_show_trash (GtkPlacesSidebar *sidebar, gboolean show_trash)
-{
-       g_return_if_fail (GTK_IS_PLACES_SIDEBAR (sidebar));
-
-       sidebar->show_trash = !!show_trash;
-       update_places (sidebar);
-}
-
-void
-gtk_places_sidebar_set_trash_is_full (GtkPlacesSidebar *sidebar, gboolean is_full)
-{
-       g_return_if_fail (GTK_IS_PLACES_SIDEBAR (sidebar));
-
-       sidebar->trash_is_full = !!is_full;
-       update_places (sidebar);
-}
-
 void
 gtk_places_sidebar_set_accept_uri_drops (GtkPlacesSidebar *sidebar, gboolean accept_uri_drops)
 {
index 8d1fef31f1a5fbe72d19d65e214418e03336ac78..1ad4cdd046446d8811f69dedca6039243f713bf8 100644 (file)
@@ -61,9 +61,6 @@ GFile *gtk_places_sidebar_get_selected_location (GtkPlacesSidebar *sidebar);
 
 void gtk_places_sidebar_set_show_desktop (GtkPlacesSidebar *sidebar, gboolean show_desktop);
 
-void gtk_places_sidebar_set_show_trash (GtkPlacesSidebar *sidebar, gboolean show_trash);
-void gtk_places_sidebar_set_trash_is_full (GtkPlacesSidebar *sidebar, gboolean is_full);
-
 void gtk_places_sidebar_set_accept_uri_drops (GtkPlacesSidebar *sidebar, gboolean accept_uri_drops);
 
 void gtk_places_sidebar_add_shortcut (GtkPlacesSidebar *sidebar, GFile *location);